package pandora.box.usuarioempresa;

import java.util.Date;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import persistence.HibernateUtil;

public class UsuarioEmpresaDAOImp implements UsuarioEmpresaDAO {	
	private Session session 		= null;
	private Transaction transaction = null;
	
	public void setSessao(Session session){
		this.session = session;
	}
	
	@Override
	public boolean inserirusuarioempresa(UsuarioEmpresa usuarioempresa) {
		boolean retorno = false;
		try {
			this.session = HibernateUtil.getSessionFactory().openSession();
			this.transaction = this.session.beginTransaction();
			usuarioempresa.setBolativo('A');
			//usuarioempresa.setCduf(1);
			usuarioempresa.setDtinclusao(new Date());
			usuarioempresa.setUsuarioinclusao("pablo");
			usuarioempresa.setNmresponsavel("root");
			System.out.println("DAO nome empresa "+usuarioempresa.getNmfantasia()+" "+usuarioempresa.getIdusuarioempresa());
			this.session.persist(usuarioempresa);
			this.transaction.commit();
			System.out.println("Codigo UsuarioEmpresa Cadastrado "+usuarioempresa.getIdusuarioempresa());
			retorno = true;
		} catch (Exception e) {
			this.transaction.rollback();
			e.printStackTrace();
		}finally{
			this.session.close();
		}
		return retorno;
	}

	@Override
	public boolean alterarusuarioempresa(UsuarioEmpresa usuarioempresa) {
		boolean retorno = false;
		try {
			this.session = HibernateUtil.getSessionFactory().openSession();
			this.transaction = this.session.beginTransaction();
			this.session.update(usuarioempresa);
			this.transaction.commit();
			retorno = true;
		} catch (Exception e) {
			this.transaction.rollback();
			e.printStackTrace();
		}finally{
			this.session.close();
		}
		return retorno;
	}

	@Override
	public boolean excluirusuarioempresa(UsuarioEmpresa usuarioEmpresa) {
		boolean retorno = false;
		try {
			this.session = HibernateUtil.getSessionFactory().openSession();
			this.transaction = this.session.beginTransaction();
			this.session.delete(this.session.get(UsuarioEmpresa.class, usuarioEmpresa.getIdusuarioempresa()));
			this.transaction.commit();
			retorno = true;
		} catch (Exception e) {
			this.transaction.rollback();
			e.printStackTrace();
		}finally{
			this.session.close();
		}
		return retorno;
	}

	@Override
	public UsuarioEmpresa listaUsuarioEmpresa(UsuarioEmpresa usuarioEmpresa) {
		UsuarioEmpresa ue = null;
		try {
			this.session = HibernateUtil.getSessionFactory().openSession();
			ue = (UsuarioEmpresa) this.session.get(UsuarioEmpresa.class, usuarioEmpresa.getIdusuarioempresa());			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			this.session.close();
		}
		return ue;
	}
	@SuppressWarnings("unchecked")
	public boolean localizarCPFCNPJ(String cpfcnpj) {
		boolean retorno = false;
		List<UsuarioEmpresa> list = null;
		Integer tam = 0; 
		try {
			this.session = HibernateUtil.getSessionFactory().openSession();
			this.transaction = this.session.beginTransaction();
			Query query = session.createQuery("from USUARIOEMPRESA where NUCNPJ = '"+cpfcnpj);
			list = query.list();
			this.transaction.commit();
			tam = list.size();
			if (!(tam == 0)){
				retorno = true;
			}
		} catch (Exception e) {
			e.printStackTrace();
			retorno = false;
		}finally{
			this.session.close();
		}
		return retorno;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<UsuarioEmpresa> listaTUsuarioEmpresas() {
		List<UsuarioEmpresa> list = null;
		try {
			this.session = HibernateUtil.getSessionFactory().openSession();
			this.transaction = this.session.beginTransaction();
			Query query = session.createQuery("from USUARIOEMPRESA");
			list = query.list();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			this.session.close();
		}
		return list;
	}

}
